/**
 * 适配器模式
 */

// 将一个类的接口转换成客户希望的另外一个接口，使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

class HomeBattery {
    supply() {
        // 家用电源提供一个 220V 的输出电压
        return 220;
    }
}

// USB 数据线只接收 5V 的充电电压
class USBLine {
    charge(volt: number) {
        // 如果电压不是 5V，抛出异常
        if (volt != 5) throw new Error('只能接收 5V 电压');
        // 如果电压是 5V，正常充电
        console.log('正常充电');
    }
}
// 加入电源适配器
class Adapter {
    convert(homeVolt: number) {
        // 适配过程：使用电阻、电容等器件将其降低为输出 5V
        const chargeVolt = homeVolt - 215;
        return chargeVolt;
    }
}
const homeBattery = new HomeBattery();
const homeVolt = homeBattery.supply();
console.log('家庭电源提供的电压是 ' + homeVolt + 'V');

const adapter = new Adapter();
const chargeVolt = adapter.convert(homeVolt);
console.log('使用适配器将家庭电压转换成了 ' + chargeVolt + 'V');

const usbLine = new USBLine();
usbLine.charge(chargeVolt);

// 但适配器模式并不推荐多用。因为未雨绸缪好过亡羊补牢，如果事先能预防接口不同的问题，不匹配问题就不会发生，只有遇到源接口无法改变时，才应该考虑使用适配器
